package com.blog.mapper;

import com.blog.dto.PageDto;
import com.blog.entity.Article;

import org.apache.ibatis.annotations.Delete;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.Date;
import java.util.List;

@Mapper
public interface ArticleMapper {

    /**
     * 根据查询条件和分页信息查找文章列表
     * @param article 文章查询条件
     * @return 文章列表
     */

    @Select("select * from me_article   ORDER BY create_date DESC ")
    List<Article> findArticles(@Param("article") Article article);
    /**
     * @return 返回所有文章的所有信息
     */
    List<Article> listAll();

    /**
     * 根据ID获取文章
     * @param id 文章ID
     * @return 文章详情
     */
    Article getArticleById(@Param("id") Integer id);



    /**
     * 根据标签ID查找文章
     * @param tagId 标签ID
     * @return 文章列表
     */
    List<Article> findArticlesByTag(@Param("tagId") Integer tagId);

    /**
     * 根据分类ID查找文章
     * @param categoryId 分类ID
     * @return 文章列表
     */
    @Select("select a.id,a.create_date,a.summary,a.title,a.tag,a.category,a.content,s.account from me_article a join sys_user s on a.author_id = s.id where a.category = #{categoryId} ")
    List<Article> findArticlesByCategory(@Param("categoryId") Integer categoryId);

    /**
     * 保存文章
     * @param
     */
    @Insert("INSERT INTO me_article(create_date, summary, title, tag, category, content, author_id) " +
            " VALUES (#{createDate}, #{summary}, #{title}, #{tag}, #{category}, #{content}," +
            "  (SELECT id FROM sys_user WHERE account = #{account}))")
    void saveArticle(@Param("title") String title,
                     @Param("content") String content,
                     @Param("tag") Integer tag,
                     @Param("category") Integer category,
                     @Param("summary") String summary,
                     @Param("createDate") Date createDate,
                     @Param("account") String account);

    /**
     * 更新文章
     * @param article 文章对象
     */
    void updateArticle(Article article);

    /**
     * 根据ID删除文章
     * @param id 文章ID
     */
    @Delete("delete from me_article where id =#{id}")
    void deleteArticleById(@Param("id") Integer id);
}
